#include <stdio.h>
#include <stdlib.h>
void main()

{
    // void* realloc(void* block, size_t size)
    // 它接受两个参数。
    // block：已经分配好的内存块指针（由malloc()或calloc()或realloc()产生）。
    // size：该内存块的新大小，单位为字节。
    // realloc()函数用于修改已经分配的内存块的大小，可以放大也可以缩小，返回一个指向新的内存块的指针。如果分配不成功，返回 NULL。
    // realloc()可能返回一个全新的地址（数据也会自动复制过去），也可能返回跟原来一样的地址。
    // realloc()优先在原有内存块上进行缩减，尽量不移动数据，所以通常是返回原先的地址。
    // 如果新内存块小于原来的大小，则丢弃超出的部分；
    int size = 2;
    int *b;
    b = malloc(sizeof(int) * size);
    for (int i = 0; i < size; i++)
    {
        b[i] = i;
        printf("%d\n", i);
    }
    printf("b 的地址是 %p\n", b);
    printf("--------------------\n");
    b = realloc(b, sizeof(int) * 2 * size);
    printf("b 的地址是 %p\n", b);
    for (int i = 0; i < (size * 2); i++)
    {
        printf("%d\n", b[i]);
    }
    // realloc()的第一个参数可以是 NULL，这时就相当于新建一个指针
    // char *p = realloc(NULL, 3490); 等同于 char *p = malloc(3490);
}